package com.beantools.util.poutil;

import com.beantools.util.ArrayUtil;

import java.io.*;

import static jdk.internal.dynalink.support.Guards.isNotNull;

/**
 * 这是文件操作的工具类
 *
 * @author baoya
 * @version 1.1.0
 * @since 1.0
 */

public class FileUtil {

    /**
     * 这是关闭写出字节码文件的方法，是要是{@code outputStreams}的子类，都使用该方法
     * 采用的面向接口的编程方式。
     *
     * @param outputStreams 字节码输出流文件
     */
    public static void closeOutputStream(OutputStream... outputStreams) {
        if (ArrayUtil.isNoNullObject(outputStreams)) {
            for (OutputStream outputStream : outputStreams) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 这是关闭输入字节码文件的方法，是要是{@code inputStreams}的子类，都使用该方法
     * 采用的面向接口的编程方式。
     *
     * @param inputStreams 字节码输入流文件
     */
    public static void closeInputStream(InputStream... inputStreams) {
        if (ArrayUtil.isNoNullObject(inputStreams)) {
            for (InputStream inputStream : inputStreams) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 这是关闭写出字节码文件的方法，是要是{@code Writer}的子类，都使用该方法
     * 采用的面向接口的编程方式。
     *
     * @param writers 写出流的变长数组
     */
    public static void closeWrite(Writer... writers) {
        if (ArrayUtil.isNoNullObject(writers)) {
            for (Writer writer : writers) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 这是关闭读入纯文本文件的方法，是要是{@code Writer}的子类，都使用该方法
     * 采用的面向接口的编程方式。
     *
     * @param readers 写出流的变长数组
     */
    public static void closeReader(Reader... readers) {
        if (ArrayUtil.isNoNullObject(readers)) {
            for (Reader reader : readers) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
